package com.shenglue.ssi.dao;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.shenglue.ssi.domain.User;

public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao {

	/**
	 * 判断登录用户是否存在
	 */
	public User isUser(User user) {

		@SuppressWarnings("unchecked")
		List<User> list = this.getSqlMapClientTemplate().queryForList(
				"selectUserByUsernameandPassword", user);
		if (list != null && list.size() > 0) {
			return list.get(0);
		} else {
			HttpServletRequest request = ServletActionContext.getRequest();
			request.setAttribute("error", "用户名或密码错误!");
			return null;
		}
	}

	/**
	 * 查询所有用户
	 */
	public List<User> selectUser() {

		@SuppressWarnings("unchecked")
		List<User> list = this.getSqlMapClientTemplate().queryForList(
		"selectUser");

		if (list != null && list.size() > 0) {
			return list;
		} else {
			return null;
		}
	}

	/**
	 * 根据用户名查找用户是否存在
	 */
	public boolean selectByName(User user) {
		boolean flag = false;
		@SuppressWarnings("unchecked")
		List<User> list = this.getSqlMapClientTemplate().queryForList(
				"selectUserByUsername", user.getName());
		if (list != null && list.size() > 0) {
			flag = true;
		}
		return flag;
	}

	/**
	 * 添加用户
	 */
	public boolean saveUser(User user) {

		// boolean flag = true;

		// 第一步 查询数据库表中是否存在(调用selectByName()方法)

		boolean f = selectByName(user);

		// 第二步 根据查询结果判断是否插入数据


		// 如果为true表示已存在 不能插入数据
		if (f == true) {
			HttpServletRequest request = ServletActionContext.getRequest();

			request.setAttribute("addUserName","用户名已存在，请重新输入用户名");

			return false;
		} else {

			//否则插入数据。 注意插入的写法
			try {
				Object oRtn = this.getSqlMapClientTemplate().insert( "insertUser", user );

				//插入成功 返回true
				return true;
			}
			catch ( DataAccessException e ) {
				//失败 返回false
				return false;
			}

			// 以下是 来自网上的旧写法，不对，已废弃。已有文章讨论
			//			flag = this.getSqlMapClientTemplate().insert("insertUser", user) != null;
			//			if (flag==false) {
			//				//插入成功 返回true
			//				return true;
			//			} else {
			//				//失败 返回false
			//				return false;
			//			}
		}
	}

	/**
	 * 修改用户信息
	 */
	public boolean updateUser(User user) {

		int falg = this.getSqlMapClientTemplate().update("updateByName", user);
		if(falg>0){
			return true;
		}else{
			return false;
		}
	}

	/**
	 * 删除用户
	 */
	public boolean deleteUser(String userName) {
		int flag= this.getSqlMapClientTemplate().delete("deleteTestByName",userName);
		if(flag>0){
			return true;
		}
		return false;
	}

}
